草庐IT

C++ inline

全部标签

c++ - header 中的 `const` 和 `constexpr` 变量是否应为 `inline` 以防止违反 ODR?

考虑以下header并假设它在多个TU中使用:staticintx=0;structA{A(){++x;printf("%d\n",x);}};作为thisquestion解释说,这是违反ODR的,因此是UB。现在,thereisnoODRviolation如果我们的inline函数引用了一个非volatileconst对象并且我们不在该函数中使用它(加上其他规定),所以这在标题中仍然可以正常工作:constexprintx=1;structA{A(){printf("%d\n",x);}};但如果我们碰巧使用它,我们又回到了与UB的第一方:constexprintx=1;struct

c++ - 如何在 GCC x86 中使用 RDTSC 计算时钟周期?

这个问题在这里已经有了答案:HowtogettheCPUcyclecountinx86_64fromC++?(5个回答)关闭4年前。使用VisualStudio,我可以从处理器读取时钟周期计数,如下所示。如何使用GCC做同样的事情?#ifdef_MSC_VER//Compiler:MicrosoftVisualStudio#ifdef_M_IX86//Processor:x86inlineuint64_tclockCycleCount(){uint64_tc;__asm{cpuid//serializeprocessorrdtsc//readtimestampcountermovdwo

c++ - 如何在 GCC x86 中使用 RDTSC 计算时钟周期?

这个问题在这里已经有了答案:HowtogettheCPUcyclecountinx86_64fromC++?(5个回答)关闭4年前。使用VisualStudio,我可以从处理器读取时钟周期计数,如下所示。如何使用GCC做同样的事情?#ifdef_MSC_VER//Compiler:MicrosoftVisualStudio#ifdef_M_IX86//Processor:x86inlineuint64_tclockCycleCount(){uint64_tc;__asm{cpuid//serializeprocessorrdtsc//readtimestampcountermovdwo

c++ - 有没有更有效的方法来获取以字节为单位的 32 位整数的长度?

我想要以下小功能的快捷方式,其中性能非常重要(该函数被调用超过10.000.000次):inlineintlen(uint32val){if(val有谁知道...一个很酷的位操作技巧?提前感谢您的帮助! 最佳答案 这个怎么样?inlineintlen(uint32val){return4-((val&0xff000000)==0)-((val&0xffff0000)==0)-((val&0xffffff00)==0);}删除inline关键字,g++-O2将其编译为以下无分支代码:movl8(%ebp),%edxmovl%edx,%

c++ - 有没有更有效的方法来获取以字节为单位的 32 位整数的长度?

我想要以下小功能的快捷方式,其中性能非常重要(该函数被调用超过10.000.000次):inlineintlen(uint32val){if(val有谁知道...一个很酷的位操作技巧?提前感谢您的帮助! 最佳答案 这个怎么样?inlineintlen(uint32val){return4-((val&0xff000000)==0)-((val&0xffff0000)==0)-((val&0xffffff00)==0);}删除inline关键字,g++-O2将其编译为以下无分支代码:movl8(%ebp),%edxmovl%edx,%

C++ -fvisibility=hidden -fvisibility-inlines-hidden

我对C++可见性属性有疑问。我已阅读http://gcc.gnu.org/wiki/Visibility但我不太明白它是如何工作的。我想在我拥有的一些共享库中隐藏可见性。我相信这意味着符号被隐藏了?那么您打算如何链接共享库?有什么特别的方法吗?如果我链接它通常如何链接它不起作用。谁能帮帮我。 最佳答案 -fvisibility=hidden默认隐藏所有符号。然后您要做的就是选择您希望链接到您的库的用户可以看到哪些功能,并通过使用可见属性标记它们使其可见。例如void__attribute__((visibility("default

C++ -fvisibility=hidden -fvisibility-inlines-hidden

我对C++可见性属性有疑问。我已阅读http://gcc.gnu.org/wiki/Visibility但我不太明白它是如何工作的。我想在我拥有的一些共享库中隐藏可见性。我相信这意味着符号被隐藏了?那么您打算如何链接共享库?有什么特别的方法吗?如果我链接它通常如何链接它不起作用。谁能帮帮我。 最佳答案 -fvisibility=hidden默认隐藏所有符号。然后您要做的就是选择您希望链接到您的库的用户可以看到哪些功能,并通过使用可见属性标记它们使其可见。例如void__attribute__((visibility("default

c++ - 使用#define 在 C++/C 中包含另一个文件

我想定义一个包含另一个头文件的宏,如下所示:#defineMY_MACRO(text)#include"__FILE__##_inline.inl"这样当预处理器解析文件person.h时,MY_MACRO(blahblah)扩展为#include"person.h.inline.inl"关于如何做到这一点的任何提示? 最佳答案 无法使用#define构造其他预处理器指令,除非您运行预处理器两次。但在您的情况下,即使运行两次预处理器也无济于事,因为#include必须是"..."形式的单个字符串或.

c++ - 使用#define 在 C++/C 中包含另一个文件

我想定义一个包含另一个头文件的宏,如下所示:#defineMY_MACRO(text)#include"__FILE__##_inline.inl"这样当预处理器解析文件person.h时,MY_MACRO(blahblah)扩展为#include"person.h.inline.inl"关于如何做到这一点的任何提示? 最佳答案 无法使用#define构造其他预处理器指令,除非您运行预处理器两次。但在您的情况下,即使运行两次预处理器也无济于事,因为#include必须是"..."形式的单个字符串或.

c++ - 可变参数函数的内联

在玩优化设置时,我注意到一个有趣的现象:采用可变数量参数的函数(...)似乎从未内联。(显然这种行为是特定于编译器的,但我已经在几个不同的系统上进行了测试。)例如编译如下小程序:#include#includestaticinlinevoidtest(constchar*format,...){va_listap;va_start(ap,format);vprintf(format,ap);va_end(ap);}intmain(){test("Hello%s\n","world");return0;}似乎总是会导致(可能被损坏)test符号出现在生成的可执行文件中(在MacOS和Li